#include "file.h"

// 读取数据到文件中
void File_Printf(Head_Node *Head, const char * file_name , const char * mod)
{
    // 打开文件 覆盖写模式 如果没有文件创建文件
    fp = fopen(file_name, mod);

    // 安全判断
    if (fp == NULL)
    {
        ERRLOG("文件未打开");
    }

    // 将文件光标移动到开头
    fseek(fp, 0, SEEK_SET);

    // 将数据读取到文件中
    Node *ptr = Head->next;
    for (size_t i = 1; ptr != NULL; i++)
    {
        fprintf(fp, "%s\t%s\t%c\n", ptr->data.user, ptr->data.pas, ptr->data.id);
        ptr = ptr->next;
    }

    // 关闭文件
    fclose(fp);
}

// 从文件中读取数据
void File_scanf(Head_Node *Head, const char *file_name)
{
    // // 如果没有文件 先创建文件
    // fp = fopen(file_name, "w");
    // fclose(fp);

    // 打开文件 只读模式
    fp = fopen(file_name, "r");

    // 安全判断
    if (fp == NULL)
    {
        ERRLOG("文件未打开");
    }

    // 将文件光标移动到开头
    fseek(fp, 0, SEEK_SET);

    // 从文件中读取数据 写入到链表中
    {
        // 判断文件有几行 控制循环次数

        char ch;      // 用于接收从文件中读取的字符 进行判断
        int line = 0; // 记录文件行数
        for (size_t i = 0; EOF != (ch = fgetc(fp)); i++)
        {
            if (ch == '\n')
            {
                line++;
            }
        }

        Node *ptr = Head->next;
        Element_data data; // 用于接受文件中的数据

        // 将文件光标移动到开头
        fseek(fp, 0, SEEK_SET);

        // 循环将文件中数据一行行读取到链表中
        for (size_t i = 0; i < line; i++)
        {
            fscanf(fp , "%s\t%s\t%c\n", data.user, data.pas, &data.id);

            // 将数据插入到链表中
            Insert_Link_List(Head, data, i + 1);
        }
    }
    // 关闭文件
    fclose(fp);
}
